package com.xuzimian.globaldemo.designpatterns.singleton;

/**
 * 懒加载模式：
 * 懒加载单例，对于静态成员变量instance初始赋值null,确保系统启动时没有额外的负载，
 * 其次在getInstance()工厂方法中，判断当前单例是否存在，若存在则返回，不存在则再
 * 建立单例。
 * 其中，getInstance()方法必须是同步的否则在多线程环境下，当线程1正新建单例时，完
 * 成赋值操作前，线程2可能判断instance为null,所以线程2也将启动新建单例的程序，从而
 * 导致多个实例被创建，就失去单例的意义了。因此需要加上同步关键字。
 * 因为引入了同步关键字，因此在多线程环境中，他的耗时要远远大于贪婪模式。
 */
public class LazySingleton {
    private LazySingleton() {
        //创建单例的过程可能会比较慢
        System.out.println("LazySingleton is create");
    }

    private static LazySingleton instance = null;

    public static synchronized LazySingleton getInstance() {
        if (instance == null)
            instance = new LazySingleton();
        return instance;
    }
}
